/*
 * @ Created with Clion
 * @ Author Morbid
 * @ Date 2022/07/25
 * @ Time 10:52
 */

/*!
 * 定义顺序栈
 * 实现顺序栈基本操作
 */

#define MaxSize 10
typedef int ElemType;
typedef struct {
    ElemType data[MaxSize];
    int top;
} SqStack;

/*!
 * 初始化栈
 * @param S 栈
 */
void InitStack(SqStack &S) {
    S.top = -1;
}

/*!
 * 判断栈是否为空
 * @param S 栈
 * @return 栈空返回true，否则返回false
 */
bool StackEmpty(SqStack S) {
    if (S.top == -1)
        return true;
    else
        return false;
}

/*!
 * 入栈
 * @param S 栈
 * @param x 入栈元素
 * @return 入栈成功返回true,否则返回false
 */
bool Push(SqStack &S, ElemType x) {
    if (S.top == MaxSize - 1)
        return false;
    S.data[++S.top] = x;
    return true;
}

/*!
 * 出栈
 * @param S 栈
 * @param x 存放出栈元素的变量
 * @return 出栈成功返回true，否则返回false
 */
bool Pop(SqStack &S, ElemType &x) {
    if (StackEmpty(S))
        return false;
    x = S.data[S.top--];
    return true;
}

/*!
 * 获取栈顶元素
 * @param S 栈
 * @param x 存储栈顶元素的变量
 * @return 获取成功返回true，否则返回false
 */
bool GetTop(SqStack S, ElemType &x) {
    if (StackEmpty(S))
        return false;
    x = S.data[S.top];
    return true;
}